package com.aseo.model.entity.hibernate;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Set;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "reclamos.vehiculo")
public class Vehiculo implements Serializable {
	
	private static final long serialVersionUID = 7180218772411623915L;

	@SequenceGenerator(name = "reclamos.vehiculo_vehiculo_id_seq", sequenceName = "reclamos.vehiculo_vehiculo_id_seq")
    @GeneratedValue(generator = "reclamos.vehiculo_vehiculo_id_seq")
    @Id
    @Basic(optional = false)
    @Column(name = "vehiculo_id")
    private Long vehiculoId;

	@Basic(optional = false)
    @Column(name = "placa")
    private String placa;
    
	@Basic(optional = false)
    @Column(name = "codigo")
    private String codigo;
    
	@Basic(optional = false)
    @Column(name = "descripcion")
    private String descripcion;
    
	@Basic(optional = false)
    @Column(name = "peso")
    private BigDecimal peso;
    
	@Basic(optional = false)
    @Column(name = "capacidad")
    private BigDecimal capacidad;
   
	@Basic(optional = false)
    @Column(name = "fecha_registro")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaRegistro;
   
	@Basic(optional = false)
    @Column(name = "fecha_actualizacion")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaActualizacion;
   
	@Basic(optional = false)
    @Column(name = "estado")
    private int estado;
   
	@OneToMany(cascade = CascadeType.ALL, mappedBy = "vehiculoId", fetch = FetchType.EAGER)
    private Set<RecorridoVehiculo> recorridoVehiculoCollection;
   
	@JoinColumn(name = "organizacion_id", referencedColumnName = "organizacion_id")
    @ManyToOne(fetch = FetchType.EAGER)
    private Organizacion organizacionId;
   
	@JoinColumn(name = "tipo_vehiculo_id", referencedColumnName = "tipo_vehiculo_id")
    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private TipoVehiculo tipoVehiculoId;
   
	@JoinColumn(name = "estado_vehiculo_id", referencedColumnName = "estado_vehiculo_id")
    @ManyToOne(fetch = FetchType.EAGER)
    private EstadoVehiculo estadoVehiculo;
   
	@OneToMany(cascade = CascadeType.ALL, mappedBy = "vehiculoId", fetch = FetchType.EAGER)
    private Set<HistorialVehiculo> historialVehiculoCollection;

    public Vehiculo() {
    }

    public Vehiculo(Long vehiculoId) {
        this.vehiculoId = vehiculoId;
    }

    public Vehiculo(Long vehiculoId, String placa, String codigo, String descripcion, BigDecimal peso, BigDecimal capacidad, Date fechaRegistro, Date fechaActualizacion, int estado) {
        this.vehiculoId = vehiculoId;
        this.placa = placa;
        this.codigo = codigo;
        this.descripcion = descripcion;
        this.peso = peso;
        this.capacidad = capacidad;
        this.fechaRegistro = fechaRegistro;
        this.fechaActualizacion = fechaActualizacion;
        this.estado = estado;
    }

    public Long getVehiculoId() {
        return vehiculoId;
    }

    public void setVehiculoId(Long vehiculoId) {
        this.vehiculoId = vehiculoId;
    }

    public String getPlaca() {
        return placa;
    }

    public void setPlaca(String placa) {
        this.placa = placa;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public BigDecimal getPeso() {
        return peso;
    }

    public void setPeso(BigDecimal peso) {
        this.peso = peso;
    }

    public BigDecimal getCapacidad() {
        return capacidad;
    }

    public void setCapacidad(BigDecimal capacidad) {
        this.capacidad = capacidad;
    }

    public Date getFechaRegistro() {
        return fechaRegistro;
    }

    public void setFechaRegistro(Date fechaRegistro) {
        this.fechaRegistro = fechaRegistro;
    }

    public Date getFechaActualizacion() {
        return fechaActualizacion;
    }

    public void setFechaActualizacion(Date fechaActualizacion) {
        this.fechaActualizacion = fechaActualizacion;
    }

    public int getEstado() {
        return estado;
    }

    public void setEstado(int estado) {
        this.estado = estado;
    }

    public Set<RecorridoVehiculo> getRecorridoVehiculoCollection() {
        return recorridoVehiculoCollection;
    }

    public void setRecorridoVehiculoCollection(Set<RecorridoVehiculo> recorridoVehiculoCollection) {
        this.recorridoVehiculoCollection = recorridoVehiculoCollection;
    }

    public Organizacion getOrganizacionId() {
        return organizacionId;
    }

    public void setOrganizacionId(Organizacion organizacionId) {
        this.organizacionId = organizacionId;
    }

    public TipoVehiculo getTipoVehiculoId() {
        return tipoVehiculoId;
    }

    public void setTipoVehiculoId(TipoVehiculo tipoVehiculoId) {
        this.tipoVehiculoId = tipoVehiculoId;
    }

    public EstadoVehiculo getEstadoVehiculo() {
		return estadoVehiculo;
	}

	public void setEstadoVehiculo(EstadoVehiculo estadoVehiculo) {
		this.estadoVehiculo = estadoVehiculo;
	}

	public Set<HistorialVehiculo> getHistorialVehiculoCollection() {
        return historialVehiculoCollection;
    }

    public void setHistorialVehiculoCollection(Set<HistorialVehiculo> historialVehiculoCollection) {
        this.historialVehiculoCollection = historialVehiculoCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (vehiculoId != null ? vehiculoId.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Vehiculo)) {
            return false;
        }
        Vehiculo other = (Vehiculo) object;
        if ((this.vehiculoId == null && other.vehiculoId != null) || (this.vehiculoId != null && !this.vehiculoId.equals(other.vehiculoId))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.aseo.model.entity.Vehiculo[vehiculoId=" + vehiculoId + "]";
    }

}
